#include<bits/stdc++.h>
using namespace std;
typedef long long LL;


int n,m;
int in[5005];
LL num[5005];
vector<int> edges[5005];
int s,t;
const LL val=80112002;
LL ans=0;

int main(){
	cin>>n>>m;
	memset(in,0,sizeof(in));
	for(int i=0;i<m;i++){
		cin>>s>>t;
		edges[s].push_back(t);
		in[t]++;
	}
	memset(num,0L,sizeof(num));
	queue<int> que;
	for(int i=1;i<=n;i++){
		if(!in[i]){
			que.push(i);
			num[i]=1;
		}
	}
	while(!que.empty()){
		int x=que.front();
		que.pop();
		if(edges[x].empty()){
			ans+=num[x];
			ans%=val;
		}
		else{
			for(auto j:edges[x]){
				in[j]--;
				num[j]+=num[x];
				num[j]%=val;
				if(in[j]==0){
					que.push(j);
				}
			}
		}
	}
	cout<<ans;
	return 0;
}
